/*
 * @Author       : Hejh(3010733382@qq.com)
 * @Version      : V1.0
 * @Date         : 2024-02-04 21:17:43
 * @Description  : 后台权限导航菜单
 */

import type { IndexObj } from '@/types/commom'

// 根据用户权限进行菜单的过滤
// 1. 对于有children的，如果本身不通过，不push，不遍历children
//    通过：对子项目递归
// 2. 对于没有children的，看本身通不通过，本身通过，push，不通过，不push
// 通过标准，auth没有或者auth列表中包含用户权限
/**
 * 根据用户权限进行菜单的过滤
 * @param permissions 权限数组
 * @param menu 原始菜单
 * @returns 返回过滤后的菜单
 */
export const filterAdminMenu = (permissions: string[], menu: IndexObj[]) => {
  const isPass = (auth: string[]) => {
    if (auth === undefined) {
      return true
    }

    return permissions.some((item) => {
      return auth.includes(item)
    })
  }

  const deepFilter = (menuItem: IndexObj) => {
    let res = null
    if (isPass(menuItem.auth)) {
      res = menuItem
      // 看是否存在children
      if (menuItem.children && menuItem.children.length > 0) {
        const arrMenu: IndexObj[] = []
        menuItem.children.forEach((item: IndexObj) => {
          const resMenu = deepFilter(item)
          if (resMenu) {
            arrMenu.push(resMenu)
          }
        })
        menuItem.children = arrMenu
      }
    }
    return res
  }

  const newMenu: IndexObj[] = []

  menu.forEach((item) => {
    const res = deepFilter(item)
    if (res) {
      newMenu.push(res)
    }
  })

  return newMenu
}

/**
 * 根据用户权限进行路由的过滤
 * @param permissions 用户权限数组
 * @param menu 原始的路由数组
 * @returns 过滤后的权限数组
 */
export const filterAdminRouter = (permissions: string[], menu: IndexObj[]) => {
  const isPass = (auth: string[]) => {
    if (auth === undefined) {
      return true
    }

    return permissions.some((item) => {
      return auth.includes(item)
    })
  }

  const deepFilter = (menuItem: IndexObj) => {
    let res = null

    let auth = undefined
    if (menuItem.meta) {
      auth = menuItem.meta.auth
    }

    if (isPass(auth)) {
      res = menuItem
      // 看是否存在children
      if (menuItem.children && menuItem.children.length > 0) {
        const arrMenu: IndexObj[] = []
        menuItem.children.forEach((item: IndexObj) => {
          const resMenu = deepFilter(item)
          if (resMenu) {
            arrMenu.push(resMenu)
          }
        })
        menuItem.children = arrMenu
      }
    }
    return res
  }

  const newMenu: IndexObj[] = []

  menu.forEach((item) => {
    const res = deepFilter(item)
    if (res) {
      newMenu.push(res)
    }
  })

  return newMenu
}

// 后台管理左侧菜单数组
export const adminMenu = [
  {
    id: 1,
    title: '用户',
    auth: ['admin'],
    icon: 'qunzu',
    level: 1,
    children: [
      {
        id: 2,
        title: '用户管理',
        name: 'user',
        icon: 'qunzu',
        level: 2
      },
      {
        id: 3,
        title: '用户激活信息',
        name: 'userActiveExam',
        icon: 'charulianjie',
        level: 2
      },
      {
        id: 4,
        title: '用户错题',
        name: 'errorQuestion',
        icon: 'chacha',
        level: 2
      },
      {
        id: 5,
        title: '题目收藏',
        name: 'questionFav',
        icon: 'shoucangjiashangpin-copy',
        level: 2
      }
    ]
  },
  {
    id: 6,
    title: '题库设置',
    icon: 'shezhi',
    auth: ['admin'],
    level: 1,
    children: [
      {
        id: 7,
        title: '考试管理',
        name: 'exam',
        icon: 'yinliangtiaojie',
        level: 2
      },
      {
        id: 8,
        title: '章节管理',
        name: 'chapter',
        icon: 'mianbaoxie-xian',
        level: 2
      },
      {
        id: 9,
        title: '试卷管理',
        name: 'paper',
        icon: 'copy',
        level: 2
      },
      {
        id: 10,
        title: '题目管理',
        name: 'question',
        icon: 'igw-l-edit',
        level: 2
      }
    ]
  },
  {
    id: 11,
    name: 'activeCode',
    title: '激活码管理',
    icon: 'charulianjie',
    level: 1,
    auth: ['admin']
  }
]
